package com.ghh.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.ghh.dao.CheckGroupDao;
import com.ghh.entity.PageResult;
import com.ghh.entity.QueryPageBean;
import com.ghh.pojo.CheckGroup;
import com.ghh.service.CheckGroupService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@Service
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;

    public void addCheckGroupAndCheckitem(Integer checkGroupId, Integer[] checkitemIds){
        //循环检查项ID，添加进关联表
        if (checkitemIds!=null&&checkitemIds.length>0) {
            for (Integer checkitemId : checkitemIds) {
                checkGroupDao.addCheckGroupAndCheckitem(checkGroupId, checkitemId);
            }
        }
    }

    //新增检查组
    @Override
    public void addCheckgroup(CheckGroup checkGroup, Integer[] checkitemIds) {
        //新增检查组，返回id
        checkGroupDao.addCheckgroup(checkGroup);
        Integer checkGroupId= checkGroup.getId();
        //调用添加关联表方法
        this.addCheckGroupAndCheckitem(checkGroupId,checkitemIds);
    }

    //分页查询检查组
    @Override
    public PageResult pageQuery(QueryPageBean queryPageBean) {
        //定义需要的数据
        Integer currentPage = queryPageBean.getCurrentPage();
        Integer pageSize = queryPageBean.getPageSize();
        String queryString = queryPageBean.getQueryString();//ThreadLocal
        //分页插件，会在执行sql之前将分页关键字追加到SQL后面
        PageHelper.startPage(currentPage,pageSize);
        Page<CheckGroup> page = checkGroupDao.findByCondition(queryString);
        return new PageResult(page.getTotal(),page.getResult());
    }

    //根据id查询检查组
    @Override
    public CheckGroup findById(Integer id) {
        return checkGroupDao.findById(id);
    }

    //根据检查组的id查询检查项的id
    @Override
    public List<Integer> findCheckItemIdsByCheckGroupId(Integer id) {
        return checkGroupDao.findCheckItemIdsByCheckGroupId(id);
    }

    //修改检查组
    @Override
    public void updateCheckGroup(CheckGroup checkGroup,Integer[] checkitemIds) {
        //调用修改检查组方法
        checkGroupDao.updateCheckGroup(checkGroup);
        //根据检查组id删除关联表
        Integer checkGroupId= checkGroup.getId();
        checkGroupDao.deleteCheckGroupAndCheckitem(checkGroupId);
        //调用添加关联表方法
        this.addCheckGroupAndCheckitem(checkGroupId,checkitemIds);
    }

    //删除检查组
    public void deleteCheckGroup(Integer id){
        //先根据检查组id删除关联表
        checkGroupDao.deleteCheckGroupAndCheckitem(id);
        //然后删除检查组
        checkGroupDao.deleteCheckGroup(id);
    }

    //查询所有检查组
    @Override
    public List<CheckGroup> findAll() {
        return checkGroupDao.findAll();
    }
}
